import socket
import numpy as np
from PIL import ImageGrab
import cv2

# UDP 配置
udp_ip = "127.0.0.1"  # 替换为接收端的 IP 地址
udp_port = 12345
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 设置要抓取的屏幕区域 (例如，左上角 0,0 到 640,480)
capture_region = (0, 0, 640, 480)

while True:
    # 抓取屏幕区域
    img = ImageGrab.grab(bbox=capture_region)
    
    # 转换为 numpy 数组
    img_np = np.array(img)
    
    # 转换为 BGR 格式
    img_bgr = cv2.cvtColor(img_np, cv2.COLOR_RGB2BGR)
    
    # 调整分辨率为 640x480
    img_resized = cv2.resize(img_bgr, (640, 480))
    
    # 转换为 RGB565 格式
    img_rgb565 = ((img_resized[:, :, 0] & 0xF8) << 8) | ((img_resized[:, :, 1] & 0xFC) << 3) | (img_resized[:, :, 2] >> 3)
    img_rgb565 = img_rgb565.astype(np.uint16)
    
    # 将图像数据转换为字节
    data = img_rgb565.tobytes()
    
    # 分块发送数据
    for i in range(0, len(data), 1280):
        sock.sendto(data[i:i+1280], (udp_ip, udp_port))

sock.close()
